/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.ventas.modelo.dao;

import java.sql.*;
import java.util.LinkedList;
import java.util.List;
import utilidades.Conexion;
import cl.ventas.modelo.Producto;


public class ProductoControl {
    
    protected Connection getConnection() {
        return Conexion.getInstanceConnection();
    }
    //Crea Lista de todos los productos y la muestra :D
    public List<Producto> findAll() {
        List<Producto> listaProducto = new LinkedList<Producto>();
        ResultSet result = null;

        try {

            String query = "SELECT * FROM producto";
            Statement stmt = getConnection().createStatement();
            result = stmt.executeQuery(query);

            while (result.next()) {
                Producto producto = new Producto();
                producto.setCodigo(result.getInt("Producto_Codigo"));
                producto.setNombre(result.getString("Producto_Nombre"));
                producto.setPrecio(result.getInt("Producto_Precio"));
                producto.setStock(result.getDouble("Producto_Stock"));
                listaProducto.add(producto);
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.out.println(se.toString());
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaProducto;
    }

    public Producto findById(int productoId) {
        ResultSet result = null;
        Producto p = null;

        try {
            // Componemos la sentencia SQL para obtener los productos.
            String query = "SELECT * FROM producto WHERE  Producto_Codigo = ?";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1, productoId);
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el producto.
            p  = new Producto();
            p.setCodigo(result.getInt("Producto_Codigo"));
            p.setNombre(result.getString("Producto_Nombre"));
            p.setPrecio(result.getInt("Producto_Precio"));
            p.setStock(result.getDouble("Producto_Stock"));

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return p;
    }

    public void save(Producto producto) {
    PreparedStatement saveProduct;
        try {

            if (producto.getCodigo()== 0) {
                saveProduct = getConnection().prepareStatement(
                        "INSERT INTO producto(producto_Nombre ,producto_Precio,producto_Stock) "
                        + "VALUES (?, ?, ?)");
                saveProduct.setString(1, producto.getNombre());
                saveProduct.setInt(2, producto.getPrecio());
                saveProduct.setDouble(3, producto.getStock());
                
                System.out.println("INSERT INTO ....");
            } else {
                saveProduct = getConnection().prepareStatement(
                "UPDATE producto SET producto_Nombre = ?, producto_Precio = ?, producto_Stock= ? WHERE  producto_Codigo= ?");
                saveProduct.setString(1, producto.getNombre());
                saveProduct.setInt(2, producto.getPrecio());
                saveProduct.setDouble(3, producto.getStock());
                saveProduct.setInt(4, producto.getCodigo());
            }

            saveProduct.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
       
    }

    public void delete(Producto producto) {
        PreparedStatement saveProduct;
        try {

            if (producto.getCodigo() > 0) {
                saveProduct = getConnection().prepareStatement(
                        "DELETE FROM producto WHERE Producto_Codigo = ?");
                saveProduct.setInt(1, producto.getCodigo());
                saveProduct.executeUpdate();
            }


            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
    
    public void ProductoStock(int cantidad, int pos) {
    PreparedStatement saveProduct;
    
        try {
            saveProduct = getConnection().prepareStatement(
            "UPDATE producto SET Producto_Stock = ? WHERE producto_Codigo = ?");
            saveProduct.setInt(1, cantidad);
            saveProduct.setInt(2, pos);
            saveProduct.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
       
    }
    protected void closeConnection() {
        Conexion.closeConnection();
    }
    
}
